package com.ckk.rabbitmq.direct;

import com.ckk.rabbitmq.config.ConnectionConfig;
import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * @author 陈昆昆
 * @version 1.0
 * @date 2020/6/20 15:35
 */
public class Recv {

        private final static String QUEUE_NAME = "direct_exchange_queue_1";
        private final static String EXCHANGE_NAME = "direct_exchange_test";

        public static void main(String[] argv) throws Exception {
            // 获取到连接
            Connection connection = ConnectionConfig.getconnection();
            // 获取通道
            Channel channel = connection.createChannel();
            // 声明队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            // 绑定队列到交换机，同时指定需要订阅的routing key。假设此处需要update和delete消息
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "update");
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "delete");

            // 定义队列的消费者
            DefaultConsumer consumer = new DefaultConsumer(channel) {
                // 获取消息，并且处理，这个方法类似事件监听，如果有消息的时候，会被自动调用
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                                           byte[] body) throws IOException {
                    // body 即消息体
                    String msg = new String(body);
                    System.out.println(" [消费者1] received : " + msg + "!");
                }
            };
            // 监听队列，自动ACK
            channel.basicConsume(QUEUE_NAME, true, consumer);
        }


}
